public class ValidaEntrada {
	/* Valida Nome. */
	/*	Inicia com letra maiúscula com restante das letras minúscula;
	 * 	Apenas o primeiro nome.
	 */
	public static boolean validaNome(String nome) {
		/*Primeiro caractere tem que ser maiúscula
		 * segundo caractere pode ser qualquer coisa alfabética
		 * não pode jamais aparecer números ou espaços
		 * 
		 */

		if(nome.matches("[A-Z][a-z]*")) return true;
		return false;
	}

	/* Valida Sobrenome. */
	/*
	 *  Pode conter espaço, hífen (seguido imediatamente de letras);
	 *  Partes do sobrenome podem começar com letra minúscula ou maiúscula.
	 */
	public static boolean validaSobrenome(String sobrenome) {
		if(sobrenome.matches("[a-zA-Z]+([ '-][A-Za-z]+)*"))return true;
		return false;
	}
	/* Valida Endereco. */
	/*
	 * Número da casa seguido do endereço (separado por um ou mais espaços);
	 * Endereço pode ter uma ou mais palavras (separado por apenas um espaço).
	 */
	public static boolean validaEndereco(String endereco) {
		/*	
		 * 	Olhando rapidamente sua expressão regular, 
		 *	me parece que faltou um quantificador + na primeira palavra 
		 *	antes do operador |. Além disso, ao utilizar o operador alternativo |, 
		 *	é preciso tomar cuidado com seu escopo (procure utilizar parênteses 
		 *	envolvendo o operador |). Além disso, parece que tem alguma coisa 
		 *	errada na busca do nome do endereço, pois você testa uma palavra com 
		 *	espaço ou múltiplas palavras sem espaço. Você precisa testar se o 
		 *	endereço é formado por uma palavra OU uma palavra seguido de múltiplos 
		 *	de um espaço mais uma palavra.
		 * 
		 */

		if(endereco.matches("^\\d+\\s+[[A-Za-z]+[\\s[A-Za-z]+]*]")) return true;
		return false;
	}

	/* Valida Cidade. */
	/*a. Partes do nome da cidade podem começar com letra maiúscula ou minúscula;
	 * Pode conter uma ou mais palavras (separado por apenas um espaço);
	 * Contém apenas letras.
	 * 
	 */
	public static boolean validaCidade(String cidade) {
		if(cidade.matches("([a-zA-Z]+|[a-zA-Z]+\\s{1,1}[a-zA-Z]+)")) return true;
		return false;
	}
	//modificar: inválido quando seria válido
	/* Valida Estado. */
	/*
	 *	Partes do nome do estado podem começar com letra maiúscula ou minúscula;
	 * 	Pode conter uma ou mais palavras (separado por apenas um espaço);
	 * 	Contém apenas letras.
	 */
	
	public static boolean validaEstado(String estado) {
		if(estado.matches("([a-zA-Z]+|[a-zA-Z]+\\s{1,1}([a-zA-Z])+)" )) return true;
		return false;
	}

	/* Valida CEP. */
	/*
	 *  Cinco dígitos, seguido de um hífen, seguido de três dígitos.
	 */
	public static boolean validaCEP(String cep) {
		if(cep.matches("\\d{5}-\\d{3}")) return true;
		return false;
	}
	
	/* Valida Telefone. */
	/*
	 * DDD(dois dígitos) + 4 Dígitos + 4 Dígitos (ex.: “10 1000-0000);
	 * Note que nem o DDD nem o telefone começam com 0.
	 */
	public static boolean validaTelefone(String telefone) {
		if(telefone.matches("[1-9][0-9]\\s[1-9][0-9]{3}-[0-9]{4}")) return true;
		return false;
	}
}